// 此vm参数为页面的实例，可以通过它引用vuex中的变量
// import {config} from '../config'
const config = require('../config')
module.exports = (vm) => {
	// 初始化请求配置
	let url = config.url
	uni.$u.http.setConfig((config) => {
		/* config 为默认全局配置*/
		config.baseURL = url; /* 根域名 */
		config.showLoading = true
		config.loadingText = ""
		return config
	})

	// 请求拦截
	uni.$u.http.interceptors.request.use((config) => { // 可使用async await 做异步操作
		// console.log('config', config)
		// 初始化请求拦截器时，会执行此方法，此时data为undefined，赋予默认{}
		config.data = config.data || {}
		// 根据custom参数中配置的是否需要token，添加对应的请求头
		let token = uni.getStorageSync('token')
		if (token) {
			config.header.token = token
		}

		//排除
		const exclude_url = ['/api/login/code_login']

		//跳过请求
		const isRequest = vm.$store.getters.getIsRequest;

		// console.log('是否跳过', isRequest)
		if (isRequest && !exclude_url.includes(config.url)) {
			// console.log('是的跳过请求')
			return Promise.resolve({
				url: null,
				data: null
			});
		}

		return config
	}, config => { // 可使用async await 做异步操作
		return Promise.reject(config)
	})

	// 响应拦截
	uni.$u.http.interceptors.response.use((response) => {
		/* 对响应成功做点什么 可使用async await 做异步操作*/
		// console.log('response', response)

		if (response.statusCode == 200 || response.statusCode == 201 || response.statusCode == 204) {
			if (response.data?.code == 2) {
				//登录过期
				uni.$u.toast(response?.data?.msg)
				uni.clearStorageSync('token')
				setTimeout(() => {
					uni.reLaunch({
						url: '/pages/login/login?isApi=1'
					})
				}, 1500);
				return Promise.reject()
			}
			if (response?.data?.code != 0) {
				uni.$u.toast(response?.data?.msg)
				return Promise.reject()
			}

			const data = response.data
			return Promise.resolve(data)
		} else {
			return Promise.reject()
		}

	}, (response) => {
		// 对响应错误做点什么 （statusCode !== 200）
		console.log("错误", response)
		if (response.statusCode == 401) {
			uni.$u.toast("请重新登录")
			setTimeout(() => {
				uni.removeStorageSync("token")
				uni.removeStorageSync("userInfo")
				uni.reLaunch({
					url: '/pages/login/login?isApi=1'
				})
			}, 1500)
		} else {
			if (response.data) {
				uni.$u.toast(response.data.message)
			}

		}
		return Promise.reject(response)
	})
}